package com.hnchances.studentscoresystem.controller;

import com.hnchances.studentscoresystem.dto.response.CommonResponse;
import com.hnchances.studentscoresystem.entity.Class;
import com.hnchances.studentscoresystem.service.ClassService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 班级管理控制器
 * 接口前缀：/class
 * 鉴权规则：所有接口需登录（无额外身份限制）
 */
@Slf4j
@RestController
@RequestMapping("/class")
public class ClassController {

    @Autowired
    private ClassService classService;

    /**
     * 新增班级
     * @param classEntity 班级信息（className 必传）
     * @return 新增结果
     */
    @PostMapping("/add")
    public CommonResponse<Boolean> addClass(@RequestBody Class classEntity) {
        log.info("新增班级，className: {}", classEntity.getClassName());
        boolean result = classService.insert(classEntity);
        return CommonResponse.success(result, "班级新增成功");
    }

    /**
     * 根据ID查询班级
     * @param classId 班级ID（请求体JSON格式：{"id":1}）
     * @return 班级信息
     */
    @PostMapping("/getById")
    public CommonResponse<Class> getClassById(@RequestBody Integer classId) {
        Class classEntity = classService.selectById(classId);
        if (classEntity == null) {
            return CommonResponse.fail(400, "班级不存在或已删除");
        }
        return CommonResponse.success(classEntity, "班级查询成功");
    }

    /**
     * 查询所有正常状态班级
     * @return 班级列表
     */
    @PostMapping("/getAll")
    public CommonResponse<List<Class>> getAllClasses() {
        List<Class> classList = classService.selectAll();
        return CommonResponse.success(classList, "所有班级查询成功");
    }

    /**
     * 修改班级信息
     * @param classEntity 班级信息（id 必传，className 可选）
     * @return 修改结果
     */
    @PostMapping("/update")
    public CommonResponse<Boolean> updateClass(@RequestBody Class classEntity) {
        if (classEntity.getId() == null) {
            return CommonResponse.fail(400, "班级ID不能为空");
        }
        boolean result = classService.update(classEntity);
        return CommonResponse.success(result, "班级修改成功");
    }

    /**
     * 软删除班级（修改status为1）
     * @param classId 班级ID（请求体JSON格式：{"id":1}）
     * @return 删除结果
     */
    @PostMapping("/del")
    public CommonResponse<Boolean> deleteClass(@RequestBody Integer classId) {
        boolean result = classService.deleteById(classId);
        return CommonResponse.success(result, "班级删除成功");
    }
}